Real time computer systems often organize application software as a set of separately-scheduled entities called "tasks." Each such task performs a specific function, or set of functions. When a "multi-tasking" computer system receives an input requiring that such a function be performed, computer software schedules for execution a task that performs the required function. The scheduling software is commonly referred to as a "real-time executive" or a "real-time operating system."
The interactions in real-time computer systems may be quite complex. For example, in the course of performing the processing required for a given input, one software task may create an input to another "local" software task functionality, which must be scheduled and executed before the original processing need can be fulfilled. Moreover, as a further complication, such computer systems often consist of several different computer subsystems that are connected together via some communications mechanism. Each of such subsystems may be multi-tasking. The tasks in each of such subsystems interact among themselves (local) as well as with the tasks in the other multi-tasking subsystems.
Multi-tasking application software is usually produced in "piece-meal" fashion. In other words, a software developer typically designs, develops and tests one or more but not all of the software tasks required in a given computer subsystem. To do so, unique software tools are created that emulate the other software tasks in the subsystem (for which the developer is not responsible). At some point, all the application software in a given computer subsystem must be tested as a whole, wherein other interacting software from other interacting subsystems are emulated. To accomplish this, the software being tested is modified by incorporating conditionally-compiled coding statements, such as printing or message sending instructions. Such an approach disadvantageously tests application software that is different from the software that will ultimately be running on the final production version of the computer system. Some software problems may therefore not be detected until the production version is running.
The art would thus benefit from a method and apparatus for testing or debugging application software in multi-tasking systems that does not alter the software being debugged.